// client.go
package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"os"
)

// 快捷键：
//

func main() {
	// 从标准输入读取要发送的字符串
	fmt.Print("Enter the string to send: ")
	// input := "hello world"  // 传输数据硬编码
	input, err := ioutil.ReadAll(os.Stdin) // ctrl + D 输出EOF符号结束
	if err != nil {
		log.Fatalf("Failed to read input: %s\n", err)
	}
	fmt.Println(input)

	// 创建POST请求
	url := "http://localhost:8080/send"
	// net/http 包没有封装直接使用请求带header的 GET 或者 POST 方法，所以，要想请求中携带header，
	//只能使用NewRequest()方法。
	// func NewRequest(method, url string, body io.Reader) (*Request, error)
	req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(input))

	if err != nil {
		log.Fatalf("Failed to create request:%s\n", err)
	}

	// 设置请求头
	req.Header.Set("Content-Type", "text/plain")

	// 发送请求并读取响应
	client := &http.Client{}
	resp, err := client.Do(req)

	if err != nil {
		log.Fatalf("Failed to send request: %s\n", err)
	}
	defer resp.Body.Close()

	// 打印响应体
	responseBody, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Fatalf("Failed to read response body: %s\n", err)
	}
	fmt.Printf("Server response: %s\n", responseBody)
}
